package com.projectCommon.util.springUtil;

import com.projectCommon.util.threadSave.ThreadLogHold;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
@Slf4j
public class InitContextAspect {
    @Pointcut("@within(com.projectCommon.util.springUtil.annotation.LogInitContext)")
    public void classLevel() {
    }
    @Pointcut("@annotation(com.projectCommon.util.springUtil.annotation.LogInitContext)")
    public void methodLevel() {
    }

    // 匹配类级别或方法级别
    @Around("classLevel() || methodLevel()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        // 如果这个注解 有参数的话，可以获取一下在做判断，目前没有
        try {
            // 初始化上下文
            ThreadLogHold.init();
            return joinPoint.proceed();
        } finally {
            // 清理上下文
            ThreadLogHold.remove();
        }
    }
}
